package muhnes.sizoo.controlador;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.event.ActionEvent;
import javax.faces.model.SelectItem;
import org.primefaces.event.FlowEvent;
import muhnes.sizoo.util.Transaccion;
import javax.faces.event.AjaxBehaviorEvent;
import muhnes.sizoo.dal.*;
import muhnes.sizoo.modelo.Restauracion;
import muhnes.sizoo.modelo.Especimen;
import muhnes.sizoo.util.Transaccion;

/**
 * Clase que controla la vista de restauraciones de especimenes
 * @author Ricardo Orellana
 */
@ManagedBean(name = "restauracionBean")
@ViewScoped
public class RestauracionBean extends CRUDBean< Restauracion, RestauracionDao > 
    implements Serializable {
    
    private List< SelectItem > itemsEspecimenes;

    /**
     * Constructor de la clase
     */
    public RestauracionBean() {
        super( Restauracion.class );
        vistaProtegida = "restauracion";
    }
    
    /**
     * Metodo que obtiene una lista de especimenes
     * @return objeto list
     */
     public List< SelectItem > getItemsEspecimenes() {
        if( itemsEspecimenes == null ) {
            itemsEspecimenes = new ArrayList< SelectItem >();
            EspecimenDao especimenDao = FabricaDAO.crearEspecimenDao();
            for( Especimen especimen : especimenDao.buscarTodos()) {
                Especimen e = especimenDao.removerProxy(especimen);
                SelectItem item = new SelectItem( e, e.getCodigoespecimen() );
                itemsEspecimenes.add( item );
            }
        }
        return itemsEspecimenes;
    }

     /**
      * Metodo que crea una nueva instancia de RestauracionDao
      *  
      */
    @Override
    protected RestauracionDao getDAO () {
        return FabricaDAO.crearRestauracionDao();
    }

    /**
     * 
     * @param transaccion indica que transaccion se debera realizar 
     * @return objeto de tipo boolean que indica que tipo de transaccion se realizara
     */
    @Override
    protected boolean debeValidar (Transaccion transaccion) {
        boolean validacion = false;
        
        switch( transaccion ) {
            case INSERCION:
            case ACTUALIZACION:
            case ELIMINACION:
                validacion = true;
        }
        
        return validacion;
    }
    
}
